/*
 *		tokens.cpp
 *
 *		The sorted table of strings and token values
 *
 *		Note: if you insert new keywords, be sure to insert the corresponding
 *		i_keyword in the i_xxx enum in tokens.h.  This enum defines the
 *		indices used by RTFWrit to output RTF control words.
 *
 *		Original RichEdit 1.0 RTF converter: Anthony Francisco
 *		Conversion to C++ and RichEdit 2.0:  Murray Sargent
 *
 *	Copyright (c) 1995-2000 Microsoft Corporation. All rights reserved.
 */
#include "_common.h"
#include "tokens.h"

const KEYWORD rgKeyword[] =
{
	{"adeff",			tokenDefaultBiDiFont},
	{"af",				tokenAssocFontSelect},
	{"afs",				tokenAssocFontSize},
	{"animtext",		tokenAnimText},
	{"ansi",			tokenCharSetAnsi},
	{"ansicpg",			tokenAnsiCodePage},
	{"b",				tokenBold},
	{"background",		tokenBackground},
	{"bgbdiag",			tokenBckgrndBckDiag},
	{"bgcross",			tokenBckgrndCross},
	{"bgdcross",		tokenBckgrndDiagCross},
	{"bgdkbdiag",		tokenBckgrndDrkBckDiag},
	{"bgdkcross",		tokenBckgrndDrkCross},
	{"bgdkdcross",		tokenBckgrndDrkDiagCross},
	{"bgdkfdiag",		tokenBckgrndDrkFwdDiag},
	{"bgdkhoriz",		tokenBckgrndDrkHoriz},
	{"bgdkvert",		tokenBckgrndDrkVert},
	{"bgfdiag",			tokenBckgrndFwdDiag},
	{"bghoriz",			tokenBckgrndHoriz},
	{"bgvert",			tokenBckgrndVert},
	{"bin",				tokenBinaryData},
	{"blue",			tokenColorBlue},
	{"box",				tokenBox},
	{"brdrb",			tokenBorderBottom},
	{"brdrbar",			tokenBorderOutside},
	{"brdrbtw",			tokenBorderBetween},
	{"brdrcf",			tokenBorderColor},
	{"brdrdash",		tokenBorderDash},
	{"brdrdashsm",		tokenBorderDashSmall},
	{"brdrdb",			tokenBorderDouble},
	{"brdrdot",			tokenBorderDot},
	{"brdrhair",		tokenBorderHairline},
	{"brdrl",			tokenBorderLeft},
	{"brdrr",			tokenBorderRight},
	{"brdrs",			tokenBorderSingleThick},
	{"brdrsh",			tokenBorderShadow},
	{"brdrt",			tokenBorderTop},
	{"brdrth",			tokenBorderDoubleThick},
	{"brdrtriple",		tokenBorderTriple},
	{"brdrw",			tokenBorderWidth},
	{"brsp",			tokenBorderSpace},
	{"bullet",			BULLET},
	{"caps",			tokenCaps},
	{"cbpat",			tokenColorBckgrndPat},
	{"cell",			tokenCell},
	{"cellx",			tokenCellX},
	{"cf",				tokenColorForeground},
	{"cfpat",			tokenColorForgrndPat},
	{"clbrdrb",			tokenCellBorderBottom},
	{"clbrdrl",			tokenCellBorderLeft},
	{"clbrdrr",			tokenCellBorderRight},
	{"clbrdrt",			tokenCellBorderTop},
	{"clcbpat",			tokenCellBackColor},
	{"clcfpat",			tokenCellForeColor},
	{"clshdng",			tokenCellShading},
	{"cltxlrtb",		tokenCellLRTB},
	{"cltxtbrlv",		tokenCellTopBotRLVert},
	{"clvertalb",		tokenCellAlignBottom},
	{"clvertalc",		tokenCellAlignCenter},
	{"clvmgf",			tokenCellMergeDown},
	{"clvmrg",			tokenCellMergeUp},
	{"collapsed",		tokenCollapsed},
	{"colortbl",		tokenColorTable},
	{"cpg",				tokenCodePage},
	{"cs",				tokenCharStyle},
	{"dbch",			tokenDBChars},
	{"deff",			tokenDefaultFont},
	{"deflang",			tokenDefaultLanguage},
	{"deflangfe",		tokenDefaultLanguageFE},
	{"deftab",			tokenDefaultTabWidth},
	{"deleted",			tokenDeleted},
	{"dibitmap",		tokenPictureWindowsDIB},
	{"disabled",		tokenDisabled},
	{"dn",				tokenDown},
	{"dropcapli",		tokenDropCapLines},
	{"embo",			tokenEmboss},
	//FUTURE (keithcu) I enabled em-dash and did some of the work for em-space and en-space.
	//Remaining is that we should output em-space and en-space via their unicode equivalents
	//as Word doesn't understand more than 1 instance of em-dash in a file it seems. Also, our
	//old measurer doesn't handle whitespace other than 0x20 properly.
	{"emdash",			EMDASH},
	{"emspace",			' '},
	{"endash",			ENDASH},
	{"enspace",			' '},
	{"expndtw",			tokenExpand},
	{"f",				tokenFontSelect},
	{"fbidi",			tokenFontFamilyBidi},
	{"fchars",			tokenFollowingPunct},
	{"fcharset",		tokenCharSet},
	{"fdecor",			tokenFontFamilyDecorative},
	{"fi",				tokenIndentFirst},
	{"field",			tokenField},
	{"fldinst",			tokenFieldInstruction},
	{"fldrslt",			tokenFieldResult},
	{"fmodern",			tokenFontFamilyModern},
	{"fname",			tokenRealFontName},
	{"fnil",			tokenFontFamilyDefault},
	{"fonttbl",			tokenFontTable},
	{"footer",			tokenNullDestination},
	{"footerf",			tokenNullDestination},
	{"footerl",			tokenNullDestination},
	{"footerr",			tokenNullDestination},
	{"footnote",		tokenNullDestination},
	{"fprq",			tokenPitch},
	{"froman",			tokenFontFamilyRoman},
	{"fs",				tokenFontSize},
	{"fscript",			tokenFontFamilyScript},
	{"fswiss",			tokenFontFamilySwiss},
	{"ftech",			tokenFontFamilyTechnical},
	{"ftncn",			tokenNullDestination},
	{"ftnsep",			tokenNullDestination},
	{"ftnsepc",			tokenNullDestination},
	{"green",			tokenColorGreen},
	{"header",			tokenNullDestination},
	{"headerf",			tokenNullDestination},
	{"headerl",			tokenNullDestination},
	{"headerr",			tokenNullDestination},
	{"hich",			tokenHIChars},
	{"highlight",		tokenColorBackground},
	{"horzvert",		tokenHorzInVert},
	{"hyphpar",			tokenHyphPar},
	{"i",				tokenItalic},
	{"impr",			tokenImprint},
	{"info",			tokenDocumentArea},
	{"intbl",			tokenInTable},
	{"itap",			tokenTableLevel},
	{"jpegblip",		tokenJpegBlip},
	{"keep",			tokenKeep},
	{"keepn",			tokenKeepNext},
	{"kerning",			tokenKerning},
	{"lang",			tokenLanguage},
	{"lchars",			tokenLeadingPunct},
	{"ldblquote",		LDBLQUOTE},
	{"li",				tokenIndentLeft},
	{"line",			tokenLineBreak},
	{"lnkd",			tokenLink},
	{"loch",			tokenLOChars},
	{"lquote",			LQUOTE},
	{"ltrch",			tokenLToRChars},
	{"ltrdoc",			tokenLToRDocument},
	{"ltrmark",			LTRMARK},
	{"ltrpar",			tokenLToRPara},
	{"mac",				tokenMac},
	{"macpict",			tokenPictureQuickDraw},
	{"nestcell",		tokenNestCell},
	{"nestrow",			tokenNestRow},
	{"nesttableprops",	tokenNestTableProps},
	{"noline",			tokenNoLineNumber},
	{"nonesttables",	tokenNoNestTables},
	{"nosupersub",		tokenNoSuperSub},
	{"nowidctlpar", 	tokenNoWidCtlPar},  
	{"objattph",		tokenObjectPlaceholder},
	{"objautlink",		tokenObjectAutoLink},
	{"objclass",		tokenObjectClass},
	{"objcropb",		tokenCropBottom},
	{"objcropl",		tokenCropLeft},
	{"objcropr",		tokenCropRight},
	{"objcropt",		tokenCropTop},
	{"objdata",			tokenObjectData},
	{"objebookimage",	tokenObjectEBookImage},
	{"object",			tokenObject},
	{"objemb",			tokenObjectEmbedded},
	{"objh",			tokenHeight},
	{"objicemb",		tokenObjectMacICEmbedder},
	{"objlink",			tokenObjectLink},
	{"objname",			tokenObjectName},
	{"objpub",			tokenObjectMacPublisher},
	{"objscalex",		tokenScaleX},
	{"objscaley",		tokenScaleY},
	{"objsetsize",		tokenObjectSetSize},
	{"objsub",			tokenObjectMacSubscriber},
	{"objw",			tokenWidth},
	{"outl",			tokenOutline},
	{"page",			tokenPage},
	{"pagebb",			tokenPageBreakBefore},
	{"par",				tokenEndParagraph},
	{"pard",			tokenParagraphDefault},
	{"piccropb",		tokenCropBottom},
	{"piccropl",		tokenCropLeft},
	{"piccropr",		tokenCropRight},
	{"piccropt",		tokenCropTop},
	{"pich",			tokenHeight},
	{"pichgoal",		tokenDesiredHeight},
	{"picscalex",		tokenScaleX},
	{"picscaley",		tokenScaleY},
	{"pict",			tokenPicture},
	{"picw",			tokenWidth},
	{"picwgoal",		tokenDesiredWidth},
	{"plain",			tokenCharacterDefault},
	{"pmmetafile",		tokenPictureOS2Metafile},
	{"pn",				tokenParaNum},
	{"pndec",			tokenParaNumDecimal},
	{"pngblip",			tokenPngBlip},
	{"pnindent",		tokenParaNumIndent},
	{"pnlcltr",			tokenParaNumLCLetter},
	{"pnlcrm",			tokenParaNumLCRoman},
	{"pnlvlblt",		tokenParaNumBullet},
	{"pnlvlbody",		tokenParaNumBody},
	{"pnlvlcont",		tokenParaNumCont},
	{"pnqc",			tokenParaNumAlignCenter},
	{"pnqr",			tokenParaNumAlignRight},
	{"pnstart",			tokenParaNumStart},
	{"pntext",			tokenParaNumText},
	{"pntxta",			tokenParaNumAfter},
	{"pntxtb",			tokenParaNumBefore},
	{"pnucltr",			tokenParaNumUCLetter},
	{"pnucrm",			tokenParaNumUCRoman},
	{"posxr",			tokenPositionRight},
	{"protect",			tokenProtect},
	{"pwd",				tokenPocketWord},
	{"qc",				tokenAlignCenter},
	{"qj",				tokenAlignJustify},
	{"ql",				tokenAlignLeft},
	{"qr",				tokenAlignRight},
	{"rdblquote",		RDBLQUOTE},
	{"red",				tokenColorRed},
	{"result",			tokenObjectResult},
	{"revauth",			tokenRevAuthor},
	{"revised",			tokenRevised},
	{"ri",				tokenIndentRight},
	{"row",				tokenRow},
	{"rquote",			RQUOTE},
	{"rtf",				tokenRtf},
	{"rtlch",			tokenRToLChars},
	{"rtldoc",			tokenRToLDocument},
	{"rtlmark",			RTLMARK},
	{"rtlpar",			tokenRToLPara},
	{"rtlrow",			tokenRToLRow},
	{"s",				tokenStyle},
 	{"sa",				tokenSpaceAfter},
	{"sb",				tokenSpaceBefore},
	{"sbys",			tokenSideBySide},
	{"scaps",			tokenSmallCaps},
	{"sect",			tokenEndSection},
	{"sectd",			tokenSectionDefault},
	{"shad",			tokenShadow},
	{"shading",			tokenShading},
	{"shp",				tokenShape},
	{"shpinst",			tokenShapeInstructions},
	{"shpwr",			tokenShapeWrap},
	{"sl",				tokenLineSpacing},
	{"slmult",			tokenLineSpacingRule},
	{"sn",				tokenShapeName},
	{"stextflow",		tokenSTextFlow},
	{"strike",			tokenStrikeOut},
	{"stylesheet",		tokenStyleSheet},
	{"sub",				tokenSubscript},
	{"super",			tokenSuperscript},
	{"sv",				tokenShapeValue},
	{"tab",				9},
	{"tb",				tokenTabBar},
	{"tc",				tokenNullDestination},
	{"tldot",			tokenTabLeaderDots},
	{"tleq",			tokenTabLeaderEqual},
	{"tlhyph",			tokenTabLeaderHyphen},
	{"tlth",			tokenTabLeaderThick},
	{"tlul",			tokenTabLeaderUnderline},
	{"tqc",				tokenCenterTab},
	{"tqdec",			tokenDecimalTab},
	{"tqr",				tokenFlushRightTab},
	{"trbrdrb",			tokenBorderBottom},
	{"trbrdrl",			tokenBorderLeft},
	{"trbrdrr",			tokenBorderRight},
	{"trbrdrt",			tokenBorderTop},
	{"trgaph",			tokenCellHalfGap},
	{"trleft",			tokenRowLeft},
	{"trowd",			tokenRowDefault},
	{"trqc",			tokenRowAlignCenter},
	{"trqr",			tokenRowAlignRight},
	{"trrh",			tokenRowHeight},
	{"tx",				tokenTabPosition},
	{"u",				tokenUnicode},
	{"uc",				tokenUnicodeCharByteCount},
	{"ul",				tokenUnderline},
	{"uld",				tokenUnderlineDotted},
	{"uldash",			tokenUnderlineDash},
	{"uldashd",			tokenUnderlineDashDotted},
	{"uldashdd",		tokenUnderlineDashDotDotted},
	{"uldb",			tokenUnderlineDouble},
	{"ulhair",			tokenUnderlineHairline},
	{"ulhwave",			tokenUnderlineHeavyWave},
	{"ulldash",			tokenUnderlineLongDash},
	{"ulnone",			tokenStopUnderline},
	{"ulth",			tokenUnderlineThick},
	{"ulthd",			tokenUnderlineThickDotted},
	{"ulthdash",		tokenUnderlineThickDash},
	{"ulthdashd",		tokenUnderlineThickDashDot},
	{"ulthdashdd",		tokenUnderlineThickDashDotDot},
	{"ulthldash",		tokenUnderlineThickLongDash},
	{"ululdbwave",		tokenUnderlineDoubleWave},
	{"ulw",				tokenUnderlineWord},
	{"ulwave",			tokenUnderlineWave},
	{"up",				tokenUp},
	{"urtf",			tokenURtf},
	{"v",				tokenHiddenText},
	{"vertdoc",			tokenVerticalRender},
	{"viewkind",		tokenViewKind},
	{"viewscale",		tokenViewScale},
	{"wbitmap",			tokenPictureWindowsBitmap},
	{"wbmbitspixel",	tokenBitmapBitsPerPixel},
	{"wbmplanes",		tokenBitmapNumPlanes},
	{"wbmwidthbytes",	tokenBitmapWidthBytes},
	{"wmetafile",		tokenPictureWindowsMetafile},
	{"xe",				tokenNullDestination},
	{"zwj",				ZWJ},
	{"zwnj",			ZWNJ}
};

INT cKeywords = ARRAY_SIZE(rgKeyword);

const KEYWORD rgShapeKeyword[] =
{
	{"fillAngle",		shapeFillAngle},
	{"fillBackColor",	shapeFillBackColor},
	{"fillColor",		shapeFillColor},
	{"fillFocus",		shapeFillFocus},
	{"fillType",		shapeFillType}
};

INT cShapeKeywords = ARRAY_SIZE(rgShapeKeyword);

const char *rgszUnrecognizedRTF[] =	// When get one of these, fire
{											//  LoFiRTF notification if enabled
	"abs",
	"aftn",									// Catch \aftnbj, \aftncn, etc.
	"animtext",
	"annotation",
//	"bkmk",									// Catch \bkmkpub, \bkmkstart, etc.
	"cldg",
	"cltx",
	"charscalex",
	"chbg",									// Catch \chbgbdiag, \chbgcross, etc.
	"chcbpat",
	"chcfpat",
	"chshdng",
	"do",
	"dropcap",
	"file",
	"fontemb",
	"formfield",
	"linkself",
	"obj",									// Catch \objxxx not found above
	"pgbrdr",
//	"pic",
	"revtbl",
	"striked",
	"tdfrmt",
	"twoinone"
//	"tp"
//	"tr"
};

INT crgszUnrecognizedRTF = ARRAY_SIZE(rgszUnrecognizedRTF);


const BYTE  szSymbolKeywords[] = "*:{}\\_|\r\n-~";

const TOKEN tokenSymbol[] =				// Keep in same order as szSymbolKeywords
{
	tokenOptionalDestination,		// *
	tokenIndexSubentry,				// :
	'{',							// {
	'}',							// }
	'\\',							// BSLASH
	NBHYPHEN,						// _ (nonbreaking hyphen)
	tokenFormulaCharacter,			// |
	tokenEndParagraph,				// CR
	tokenEndParagraph,				// LF
	SOFTHYPHEN,						// - (optional hyphen)
	NBSPACE							// ~ (nonbreaking space)
};


